草庐IT

c++ - QMap 和 std::unique_ptr

全部标签

java - 限制来自 Java 的 native 代码功能

我有一个java应用程序,它在某些部分使用JNI来完成一些工作。它遵循通常的DLL加载,然后调用DLL的本地方法。有什么方法可以限制native方法可以从Java应用程序做什么?例如,我们是否可以限制DLL不打开任何文件或不打开任何套接字,即使它有代码可以这样做?它可以禁止它加载的DLL来做某些事情,可能是通过登录某些东西或抛出异常。 最佳答案 不,你不能。DLL作为一个整体加载,然后Java端无法控制native代码正在做什么。一种解决方案可能是中间人方法。这将涉及编写一个与原始DLL具有相同接口(interface)的“外壳”D

java - JNI system.out 和 printf 行为

我正在编写一个程序,该程序使用JNI与一个简单的C程序进行交互。我创建了以下程序:publicstaticvoidmain(String[]args){Helloh=newHello();System.out.println("before");intnumber=h.sayHello();System.out.println(number);System.out.println("after");}和JNIEXPORTintJNICALLJava_Hello_sayHello(JNIEnv*env,jobjectobj){printf("HelloJNI\n");return10;}

java - Eclipse 中大量迭代后循环中的断点

假设我有以下代码。调试时,我希望Eclipse在完成100万次迭代后停止。这该怎么做?我无法手动执行100万次。for(inti=0;i 最佳答案 你可以在eclipse中放置条件断点:设置断点右击->属性打开“条件”复选框输入条件代码我==1000000 关于java-Eclipse中大量迭代后循环中的断点,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/19216593/

java - 使用 JNI 从 C 调用 java 代码时发生内存泄漏

我有一个C程序,它使用JNI在java存储中存储一些对象。(在有人问之前,这里需要使用javastore,我必须用C编写一个客户端,它能够从这个store添加和检索对象)。我编写了程序并尝试添加100000个大小为1KB的对象。但是在仅添加50000个对象后,我收到“内存不足”消息(请注意,每当我无法使用NewStringUTF和NewByteArray函数分配新的字符串或字节数组时,我都会打印这些“内存不足”消息)。那时我的应用程序只使用了80MB的内存。我不明白为什么这些方法返回NULL。有什么我想念的吗。此外,即使我正在释放为java创建的字节数组和字符串,内存也会继续增加。这是

java - 我应该如何编写 .i 文件以用 Java 或 C# 包装回调

我的C程序使用定期调用的回调函数。我希望能够处理Java或C#程序中的回调函数。我应该如何编写.i文件来实现这一点?C回调看起来是这样的:staticvoidon_incoming_call(pjsua_acc_idacc_id,pjsua_call_idcall_id,pjsip_rx_data*rdata) 最佳答案 如果您有机会通过回调传递一些数据,您可以这样做,但您需要编写一些JNI胶水。我整理了一个完整示例,说明如何将C样式回调映射到Java接口(interface)。您需要做的第一件事是确定适合Java端的接口(inte

java - 是否可以从 Java 运行 C 源代码?

现在我有一些C源代码,我想在我的java应用程序中使用它。我需要执行C源代码,并将结果返回给我的java应用程序。我如何才能在我的java应用程序中重用C的源代码,而不是将所有C源代码重写为java? 最佳答案 看看JavaNativeInterface.TheJavaNativeInterface(JNI)isaprogrammingframeworkthatenablesJavacoderunninginaJavaVirtualMachine(JVM)tocallandtobecalledbynativeapplications

java - 使用 Java 解析/读取 C 头文件

我有一个C-Header文件,它定义了几个包含多个char数组的结构。我想使用Java解析这些文件。是否有用于将C-Header文件读入结构的库,或者是否有理解C-Header文件的流解析器?只是为了了解更多背景(我只是在寻找C-Header解析器,而不是针对这个特定问题的解决方案):我有一个包含数据的文本文件和一个解释结构的C-Header文件。两者都有点动态,所以我不想生成Java类文件。例子:#defineTYPE1typedefstructtype1{charname1[10];charname2[5];}#endifType2、Type3等类似。数据结构:type1fffff

Java 比 C 快

这个问题在这里已经有了答案:HowdoIwriteacorrectmicro-benchmarkinJava?(11个答案)关闭9年前。今天我做了一个简单的测试来比较java和c之间的速度-一个简单的循环,使整数“i”从0递增到20亿。我真的希望c语言比java更快。我对结果感到惊讶:java花费的时间(以秒为单位):大约。1.8秒c花费的时间(以秒为单位):大约。3.6秒。我根本不认为java是一种更快的语言,但我也不明白为什么在我的简单程序中循环比c快两倍?我是否在程序中犯了重大错误?还是MinGW的编译器配置不当之类的?publicclassJrand{publicstaticv

Java 相当于 register int?

在C中,我可以为一个变量分配一个寄存器,例如:registerinti=0;我知道Java是一种解释型语言,并且是远离CPU的许多抽象。是否有任何机制可用于甚至请求(如果体系结构不允许,那又怎样)我的变量保留在寄存器中而不是移动到缓存或主内存?我想没有任何办法,但我之前也有过惊喜。谢谢, 最佳答案 C中的register不会将变量放入寄存器。它只是给编译器提示,将其放入寄存器可能会很好。在Java中没有等价物。 关于Java相当于registerint?,我们在StackOverflow

java - 对于 Java 和 C 编译器,代码的行为有何不同?

我有这段代码,我在Java和C上运行了它,但它们给了我两个不同的结果。是什么让它们以不同的方式运行。x=10;y=10;z=10;y-=x--;z-=--x;x-=--x-x--;X的值在Java中的输出是:8,对于C,它是6。这两个编译器对于递增选项的行为有何不同? 最佳答案 当您说这段代码被视为C程序的输出是6时,您是错误的。作为C程序,这是undefined.您的编译器只是碰巧得到6,但您也可能得到24、段错误或编译时错误。参见C99standard,6.5.2:在前一个和下一个序列点之间,一个对象应该有它的存储值最多通过表达